use std::collections::HashMap;
use rusty_engine::prelude::{Resource, Timer};

// 游戏场景
#[derive(Debug, Clone, Copy, PartialEq, Eq, Resource)]
pub enum GameScene {
    MainMenu,       // 主菜单
    SingleGame,     // 单人游戏
    DoubleGame,     // 双人游戏
    GameOver,       // 游戏结束
}

#[derive(Debug, Clone, Resource)]
pub struct GameState {
    // 游戏系统
    pub current_scene: GameScene,           // 当前场景
    pub last_scene : GameScene,             // 上一个场景
    pub stop: bool,                         // 游戏是否暂停
    pub lost: Vec<bool>,                    // 玩家是否死亡
    pub hit: Vec<bool>,                     // 玩家是否处于受击状态
    // 游戏数据
    pub health_amount: Vec<u8>,             // 生命值
    pub coins: Vec<u32>,                    // 金币数量
    pub score: Vec<u32>,                    // 实时分数
    pub distance: Vec<f32>,                 // 行驶距离
    pub car_speeds: HashMap<String, f32>,   // 添加车辆速度存储
    pub hit_timer : Vec<Timer>,             // 受击计时器
    pub hearts_cnt: u32,                    // 爱心计数器
    // 初始化
    pub main_menu_init: bool,               // 主菜单
    pub game_single_init: bool,             // 单人游戏
    pub game_double_init: bool,             // 双人游戏
    pub game_over_init: bool,               // 游戏结束
}

impl Default for GameState {
    fn default() -> Self {
        Self {
            current_scene : GameScene::MainMenu,
            last_scene : GameScene::MainMenu,
            lost: Vec::new(),
            stop: false,
            hit: Vec::new(),
            //fps_cnt : 0,
            health_amount: Vec::new(),
            coins : Vec::new(),
            score : Vec::new(),
            distance : Vec::new(),
            car_speeds : HashMap::new(),
            hit_timer : Vec::new(),
            hearts_cnt : 0,
            main_menu_init : false,
            game_single_init : false,
            game_double_init : false,
            game_over_init : false,
        }
    }
}